//
// Created by francklinson on 2021/10/23 AT 20:45.
//

#include <string>
#include <iostream>

/**
 * 左值是有location 属性的 是内存中确定位置的变量
 * 右值是一个瞬态的中间量
 * 左值参数只能接收左值变量，除非这个参数前有const
 * 右值参数只接收temp的右值量
 * @return
 */
int &GetValue() {
    static int value = 10;
    return value;
}

void SetValue(const int &value) {

}

void printName(std::string &name) {
    std::cout << "& printName" << std::endl;
}

void printName(std::string &&name) { // 传入右值 temp的 可以直接move走（steal）
    std::cout << "&& printName" << std::endl;
}

int main() {
    int i = 10;
    int j = GetValue();
    GetValue() = 2;
    SetValue(i);
    SetValue(GetValue());
    SetValue(2);
    const int &a = 10;
    std::string firstName = "Chenghao";
    std::string FamilyName = "Zhou";
    std::string fullName = firstName + FamilyName;
    printName(firstName);
    printName(FamilyName);
    printName(firstName + FamilyName); // 右值

    return 0;
}
